Skip to content

HJ87 密码强度等级 ​

本节目标:理解“HJ87 密码强度等级”的核心思路,并能把它用于实际开发或面试表达。 描述 密码按如下规则进行计分,并根据不同的得分为密码进行安全等级划分。

一、密码长度: 5 分: 小于等于4 个字符 10 分: 5 到7 字符 25 分: 大于等于8 个字符

二、字母: 0 分: 没有字母 10 分: 密码里的字母全都是小(大)写字母 20 分: 密码里的字母符合”大小写混合“

三、数字: 0 分: 没有数字 10 分: 1 个数字 20 分: 大于1 个数字

四、符号: 0 分: 没有符号 10 分: 1 个符号 25 分: 大于1 个符号

五、奖励(只能选符合最多的那一种奖励): 2 分: 字母和数字 3 分: 字母、数字和符号 5 分: 大小写字母、数字和符号 最后的评分标准: >= 90: 非常安全 >= 80: 安全(Secure) >= 70: 非常强 >= 60: 强(Strong) >= 50: 一般(Average) >= 25: 弱(Weak) >= 0: 非常弱(Very_Weak)

对应输出为:

VERY_SECURE SECURE VERY_STRONG STRONG AVERAGE WEAK VERY_WEAK

请根据输入的密码字符串,进行安全评定。

注: 字母:a-z, A-Z 数字:0-9 符号包含如下: (ASCII码表可以在UltraEdit的菜单view->ASCII Table查看) !"#$%&'()*+,-./ (ASCII码:0x21~0x2F) :;<=>?@ (ASCII码:0x3A~0x40) []^_` (ASCII码:0x5B~0x60) {|}~ (ASCII码:0x7B~0x7E)

提示: 1 <= 字符串的长度<= 300 输入描述: 输入一个string的密码 输出描述: 输出密码等级 示例1 输入: 38$@NoNoN ==复制== 输出: VERY_SECURE ==复制== 说明: 样例的密码长度大于等于8个字符,得25分;大小写字母都有所以得20分;有两个数字,所以得20分;包含大于1符号,所以得25分;由于该密码包含大小写字母、数字和符号,所以奖励部分得5分,经统计得该密码的密码强度为25+20+20+25+5=95分。 示例2 输入: Jl)M:+ ==复制== 输出: AVERAGE ==复制== 说明: 示例2的密码强度为10+20+0+25+0=55分。

def password_strength_optimized(password): length_score = digit_count = upper_count = lower_count = symbol_count = 0

一、密码长度评分 ​

if len(password) <= 4: length_score = 5 elif 5 <= len(password) <= 7: length_score = 10 else: length_score = 25

通过单次遍历密码,统计各类字符数量 ​

for char in password: if char.isdigit(): digit_count += 1 elif char.isupper(): upper_count += 1 elif char.islower(): lower_count += 1 elif not char.isalnum(): symbol_count += 1

二、字母评分 ​

letter_score = 20 if upper_count > 0 and lower_count > 0 else 10 if upper_count > 0 or lower_count > 0 else 0

三、数字评分 ​

digit_score = 20 if digit_count > 1 else 10 if digit_count == 1 else 0

四、符号评分 ​

symbol_score = 25 if symbol_count > 1 else 10 if symbol_count == 1 else 0

五、奖励评分 ​

bonus_score = 5 if upper_count and lower_count and digit_count and symbol_count else
3 if letter_score and digit_count and symbol_count else
2 if letter_score and digit_count else 0

计算总分 ​

total_score = length_score + letter_score +
digit_score + symbol_score + bonus_score

判断密码等级 ​

if total_score >= 90: return "VERY_SECURE" elif total_score >= 80: return "SECURE" elif total_score >= 70: return "VERY_STRONG" elif total_score >= 60: return "STRONG" elif total_score >= 50: return "AVERAGE" elif total_score >= 25: return "WEAK" else: return "VERY_WEAK"

输入密码 ​

password = input()

输出密码等级 ​

print(password_strength_optimized(password))

本站总访问 — 次